<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 函数是JS中的一等公民

    // 函数的高阶应用:
    // 1. 回调函数
    //    把一个函数作为参数传入到另一个函数中,让它在另一个函数中执行  => 用户可以根据自己的需要传入函数(自定义执行的内容) => 让其在另一个的函数中执行
    // 2. 闭包  有权访问另一个函数作用域中变量的函数 
    // 简单的来说: 函数在执行过程中返回了另一个函数, 该函数引用了父作用域中的变量/方法, 导致父级函数即便执行完毕,对应的AO对象也不会被释放
    // 3. 柯里化函数 
    //    把接受多个参数的函数变换成接受一个单一参数（最初函数的第一个参数）的函数，并且返回接受余下的参数而且返回结果的新函数的技术。



    // 执行空间(执行环境 执行栈)  => 如果执行空间 => 入栈, 跳出执行空间 => 出栈 
    // 全局的执行空间  => GO (窗口关闭)
    // 函数的执行空间  => AO (一般情况下 函数执行完毕就被释放)

    debugger;

    var a = 10;
    var b = 20;
    console.log(1,a,b); // 10 20 -> 100

    function fn(){
        var a = b = 100;
       
        console.log(2, a, b); // 100 100
    }

    fn();
    console.log(2, a,b);  // 10 100



</script>
</html>